// 据说呢，go 不是面向对象的语言，但是也有对应的写法来解决这个问题
// Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数，接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。语法格式如下：
/*
func (variable_name variable_data_type) function_name() [return_type]{
   // 函数体
}
*/

package main

import (
   "fmt"  
)

/* 定义结构体 */
// 我感觉可以理解为一种自定义的类型，或者说定义类，虽然说 go 语言中没有这种概念
type Circle struct {
  radius float64
}

func main() {
  // 可以指定这种类型，这里有点可以理解为将类进行实例化
  var c1 Circle
  // 可以理解为实例化之后可以指定类里面的属性的值
  c1.radius = 10.00
  // 可以理解为实例调用这个类的方法，方法在下面的代码中定义
  fmt.Println("圆的面积 = ", c1.getArea())
}

// 该 method 属于 Circle 类型对象中的方法
// (c Circle) 可以表示给这个类定义方法，给个变量方便方法的代码中调用
// getArea() 为这个类方法的方法名
func (c Circle) getArea() float64 {
  // c.radius 即为 Circle 类型对象中的属性，前面定义了 c 变量，即可在里面的代码中进行调用了
  return 3.14 * c.radius * c.radius
}